第十八天 Memory Management(記憶體管理)--中
Swapping:
在程式執行時,process有時會需要暫時離開記憶體,之後會再搬回來執行,這就叫做swapping,搬上搬下的動作我們稱為roll out跟roll in。而在這裡的硬碟(disk)我們會將它稱作backing store,兩者是互通的。
Swap時需要考量搬回來時是否還能在同樣的位置,這就要看binding method怎麼做了!但其實swap是一件很累的是,所以一定是到記憶體無法負荷時,才會用的大絕招。在早期swap是很重要的,但現在多用虛擬記憶體(後面一章會詳細說明)來處理了。
說到這裡也許有人或覺得怪怪的,之前我們不是有提過context switch?他跟swap有什麼差別呢?swap就跟我們上面提的一樣,是process在記憶體搬上搬下的,而context switch是兩個process在轉換資訊的過程。
舉例來說,當現在CPU處理一個process到一半,要用到另外一個process,這時如果那個process不在記憶體內,就要把它swap進來,然後再跟現在的process進行context switch,但這裡context switch的時間就會被拉長,因為還要把一個process搬出去,再把一個搬進來。這時我們可以運用system call來知道記憶體的使用,看是否有足夠的空間能直接把需要的process拉進來,不用一個換一個,浪費時間。
而swap還會遇到一個問題,如果他要移除正在執行的I/O呢?他有三個選擇:
現在我們來說說記憶體的分配方法!
Multiple-partition allocation:
在main memory中兩部分,resident operating system(kernel)跟user processes,kernel握有low memory,而user processes握有high memory。
這個方法是將記憶體切割成使用效率好的大小,當process執行完後,他會將空間是放給下一個process使用。以下有參考圖:
我們在找可用的記憶體空間有三種方法:
但是不管用哪種方式,都會產生碎片(fragmentation):
要解決碎片的方法就用compaction,將process移來移去,讓其餘的記憶體空間能夠聚在一起,但是process必須是dynamic才可以這樣做,而且I/O在這也還是個問題。